---
id: dbcontext-delete
title: 9.8 删除操作
sidebar_label: 9.8 删除操作
---

## 9.8.1 删除一个实体（不立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.Delete(user);

// 示例二
user.Delete();

// 示例三
repository.ChangeEntityState(user, EntityState.Deleted);

// 示例四
repository.Entities.Remove(user);

// ==== 异步操作 ====

// 示例一
await repository.DeleteAsync(user);

// 示例二
await user.DeleteAsync();
```

## 9.8.2 删除一个实体（立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.DeleteNow(user);

// 示例二
user.DeleteNow();

// ==== 异步操作 ====

// 示例一
await repository.DeleteNowAsync(user);

// 示例二
await user.DeleteNowAsync();
```

## 9.8.3 根据主键删除记录（不立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.Delete(1);

// 示例二
user.Delete(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteAsync(1);

// 示例二
await user.DeleteAsync(1);
```

## 9.8.4 根据主键删除记录（立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.DeleteNow(1);

// 示例二
user.DeleteNow(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteNowAsync(1);

// 示例二
await user.DeleteNowAsync(1);
```

## 9.8.5 数据存在才根据主键删除（不立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.DeleteExists(1);

// 示例二
user.DeleteExists(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteExistsAsync(1);

// 示例二
await user.DeleteExistsAsync(1);
```

## 9.8.6 数据存在才根据主键删除（立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.DeleteExistsNow(1);

// 示例二
user.DeleteExistsNow(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteExistsNowAsync(1);

// 示例二
await user.DeleteExistsNowAsync(1);
```

:::tip 小知识

所有带 `Now` 结尾的表示立即提交到数据库，也就是立即调用 `SaveChanges` 或 `SaveChangesAsync`。

:::

## 9.8.7 假删除/软删除

`Furion` 框架中可以通过 `[FakeDelete]` 特性标记假删除特性，如：

### 9.8.7.1 添加 `[FakeDelete]` 标记

```cs {3}
public class Model: IEntity
{
    [FakeDelete(true)]  // 设置假删除的值
    public bool IsDeleted { get; set; }
}
```

:::note [FakeDelete]

**`[FakeDelete]** 属性拥有带一个参数的构造函数，这个参数是假删除的值

:::

### 9.8.7.2 假删除使用

```cs
// ==== 同步操作 ====

// 示例一
repository.FakeDelete(entity);

// 示例二
repository.FakeDeleteNow(entity);

// 示例三
repository.FakeDelete(1);

// 示例四
repository.FakeDeleteNow(1);

// 示例五
entity.FakeDelete();

// 示例六
repository.UpdateInclude(user, u => u.IsDeleted);

// ==== 异步操作 ====

// 示例一
await repository.FakeDeleteAsync(entity);

// 示例二
await repository.FakeDeleteNowAsync(entity);

// 示例三
await repository.FakeDeleteAsync(1);

// 示例四
await repository.FakeDeleteNowAsync(1);

// 示例五
await entity.FakeDeleteAsync();

// 示例六
await repository.UpdateIncludeAsync(user, u => u.IsDeleted);
```

## 9.8.8 反馈与建议

:::note 与我们交流

给 Furion 提 [Issue](https://gitee.com/dotnetchina/Furion/issues/new?issue)。

:::
